001 /* 002 * Created by IntelliJ IDEA. 003 * User: Wei Wang 004 * Date: 2002-9-4 005 * Time: 13:50:04 006 * To change template for new class use 007 * Code Style | Class Templates options (Tools | IDE Options). 008 */ 009 package EVolve.util.unifyutils; 010 011 import EVolve.visualization.*; 012 import EVolve.visualization.XYViz.XYVisualization; 013 import EVolve.Scene; 014 import EVolve.util.unifyutils.UnifiedVisualization; 015 016 import javax.swing.*; 017 import java.util.ArrayList; 018 import java.awt.*; 019 import java.awt.event.*; 020 021 public class UnifiedVisualizationRunner { 022 private ArrayList[] unifiedDimension; 023 private JDialog dialog; 024 private List availableList; 025 private List unifiableList; 026 private ArrayList unifiableViz; 027 private JComboBox comboDimension; 028 private int dimension; 029 030 031 public UnifiedVisualizationRunner() { 032 unifiedDimension = new ArrayList[3]; 033 for (int i=0;i<unifiedDimension.length;i++) unifiedDimension[i] = new ArrayList(); 034 unifiableViz = new ArrayList(); 035 } 036 037 public void createDialog() { 038 dialog = new JDialog(Scene.getFrame(), "Unifying Visualizations...", true); 039 dialog.setBounds(new Rectangle(500,400)); 040 041 Box boxMain = new Box(BoxLayout.Y_AXIS); 042 boxMain.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), 043 "Choose Visualizations to be unified")); 044 dialog.getContentPane().add(boxMain,BorderLayout.CENTER); 045 046 Box boxLabels = new Box(BoxLayout.X_AXIS); 047 boxLabels.add(new JLabel("Available visualizations:")); 048 boxLabels.add(Box.createHorizontalStrut(195)); 049 boxLabels.add(new JLabel("Unifiable visualizations:")); 050 051 Box boxLinkDimension = new Box(BoxLayout.Y_AXIS); 052 boxLinkDimension.setBounds(new Rectangle(20,300)); 053 comboDimension = new JComboBox(); 054 comboDimension.setEnabled(false); 055 056 057 boxLinkDimension.add(Box.createVerticalStrut(40)); 058 boxLinkDimension.add(new JLabel("Choose unified dimension ")); 059 boxLinkDimension.add(Box.createVerticalStrut(10)); 060 boxLinkDimension.add(comboDimension); 061 comboDimension.setBounds(new Rectangle(20,20)); 062 boxLinkDimension.add(Box.createVerticalStrut(205)); 063 comboDimension.addActionListener(new ActionListener() { 064 public void actionPerformed(ActionEvent e) { 065 updateLinkableList(); 066 } 067 }); 068 069 070 Box boxLists = new Box(BoxLayout.X_AXIS); 071 availableList = new List(6,false); 072 ArrayList arr = Scene.getVisualizationManager().getVisualizationList(); 073 for (int i=0; i<arr.size(); i++) { 074 availableList.add((((Visualization)arr.get(i)).getName())); 075 } 076 availableList.addItemListener(new ItemListener() { 077 public void itemStateChanged(ItemEvent e){ 078 updateComboDimension(); 079 } 080 }); 081 unifiableList = new java.awt.List(6,true); 082 boxLists.add(availableList); 083 boxLists.add(Box.createHorizontalStrut(10)); 084 boxLists.add(boxLinkDimension); 085 boxLists.add(Box.createHorizontalStrut(10)); 086 boxLists.add(unifiableList); 087 088 boxMain.add(boxLabels); 089 boxMain.add(boxLists); 090 091 Box boxOkCancel = new Box(BoxLayout.X_AXIS); 092 JButton buttonOK = new JButton("OK"); 093 JButton buttonCancel = new JButton("Cancel"); 094 095 buttonOK.addActionListener(new ActionListener(){ 096 public void actionPerformed(ActionEvent e){ 097 onOK(); 098 } 099 }); 100 buttonCancel.addActionListener(new ActionListener(){ 101 public void actionPerformed(ActionEvent e){ 102 onCancel(); 103 } 104 }); 105 boxOkCancel.add(Box.createHorizontalStrut(180)); 106 boxOkCancel.add(buttonOK); 107 boxOkCancel.add(Box.createHorizontalStrut(20)); 108 boxOkCancel.add(buttonCancel); 109 110 dialog.getContentPane().add(boxOkCancel,BorderLayout.SOUTH); 111 } 112 113 private void updateComboDimension() { 114 int index = availableList.getSelectedIndex(); 115 116 if (index == -1) return; 117 Visualization visual = (Visualization) Scene.getVisualizationManager().getVisualizationList().get(index); 118 int[] flags = getLinkableDimension(visual); 119 120 comboDimension.removeAllItems(); 121 for (int i=0; i<flags.length; i++) { 122 switch (i) { 123 case 0: 124 if (flags[i] == 1) 125 comboDimension.addItem("X-Axis"); 126 break; 127 case 1: 128 if (flags[i] == 1) 129 comboDimension.addItem("Y-Axis"); 130 break; 131 case 2: 132 if (flags[i] == 1) 133 comboDimension.addItem("Z-Axis"); 134 break; 135 } 136 } 137 if (comboDimension.getItemCount() != 0) { 138 comboDimension.setSelectedIndex(0); 139 comboDimension.setEnabled(true); 140 } else { 141 comboDimension.setEnabled(false); 142 unifiableList.removeAll(); 143 } 144 } 145 146 private void updateLinkableList() { 147 int index = availableList.getSelectedIndex(); 148 Visualization visual = (Visualization) Scene.getVisualizationManager().getVisualizationList().get(index); 149 150 String selectedItem = (String)comboDimension.getSelectedItem(); 151 if (selectedItem.charAt(0) == 'X') { 152 dimension = 0; 153 } else if (selectedItem.charAt(0) == 'Y') { 154 dimension = 1; 155 } else { 156 dimension = 2; 157 } 158 unifiableList.removeAll(); 159 getLinkableVisualization(visual,dimension); 160 for (int i=0; i<unifiableViz.size(); i++) { 161 unifiableList.add(((Visualization)unifiableViz.get(i)).getName()); 162 } 163 } 164 165 private int[] getLinkableDimension(Visualization visual) { 166 int[] returnVal = new int[visual.getDimension().length]; 167 168 for (int i=0; i<returnVal.length; i++) { 169 if (visual.getLinkableDimension(i) != null ) 170 returnVal[i] = 1; 171 else 172 returnVal[i] = 0; 173 } 174 return returnVal; 175 } 176 177 private void getLinkableVisualization(Visualization visual,int dimension) { 178 ArrayList arr = Scene.getVisualizationManager().getVisualizationList(); 179 180 unifiableViz.clear(); 181 for (int i=0; i< arr.size(); i++) { 182 if (i == availableList.getSelectedIndex()) continue; 183 Visualization visual2 = (Visualization)arr.get(i); 184 if (isLinkable(visual,visual2,dimension)) unifiableViz.add(visual2); 185 } 186 } 187 188 public void onOK() { 189 int[] indexes = unifiableList.getSelectedIndexes(); 190 191 if (indexes.length == 0) { 192 Scene.showErrorMessage("Please select visualizations to be linked"); 193 return; 194 } 195 196 Visualization[] viz= new Visualization[indexes.length +1]; 197 198 viz[0] = (Visualization)Scene.getVisualizationManager().getVisualizationList().get(availableList.getSelectedIndex()); 199 for (int i=0; i<indexes.length; i++) { 200 viz[i+1] = (Visualization)unifiableViz.get(indexes[i]); 201 } 202 dialog.setVisible(false); 203 newLinkedVisualization(dimension,viz); 204 runLinkedVisualization(); 205 } 206 207 public void onCancel() { 208 dialog.setVisible(false); 209 } 210 211 public void showWindow() { 212 createDialog(); 213 Scene.getUIManager().showDialog(dialog, dialog.getWidth(), dialog.getHeight()); 214 } 215 216 public void newLinkedVisualization(int dim, Visualization[] viz) { 217 UnifiedVisualization linkedViz = null; 218 int linkingNo = -1; 219 220 for (int j =0; j< viz.length; j++) { 221 for (int i = 0; i < unifiedDimension[dim].size(); i++) { 222 linkedViz = (UnifiedVisualization) unifiedDimension[dim].get(i); 223 if (linkedViz.exists(viz[j])) { 224 linkingNo = i; 225 j = viz.length +1; 226 break; 227 } 228 } 229 } 230 231 if (linkingNo == -1) { 232 linkedViz = new UnifiedVisualization(dim); 233 unifiedDimension[dim].add(linkedViz); 234 } 235 236 linkedViz.addVisualization(viz); 237 } 238 239 public boolean isLinkable(Visualization visualLinked,Visualization visualLinking,int dim) { 240 int typeLinked, typeLinking; 241 ReferenceDimension linkableDim = visualLinked.getLinkableDimension(dim); 242 243 if ((visualLinked.getLinkableDimension(dim) == null)|| 244 (visualLinking.getLinkableDimension(dim) == null)) return false; 245 246 typeLinked = linkableDim.getDataFilter().getTargetType(); 247 248 if (visualLinking.getDimension().length<dim+1) 249 return false; 250 else 251 typeLinking = visualLinking.getLinkableDimension(dim).getDataFilter().getTargetType(); 252 253 if ((visualLinking.getSubjectDefinition().getName().equals(visualLinked.getSubjectDefinition().getName())) && 254 (visualLinking.getFactory().getName().equals(visualLinked.getFactory().getName())) && 255 (visualLinking.getDimension()[0].getName().equals(visualLinked.getDimension()[0].getName())) && 256 (visualLinking.getDimension()[1].getName().equals(visualLinked.getDimension()[1].getName())) && 257 (visualLinking.getVisualizationID()==visualLinked.getVisualizationID())) 258 return false; 259 260 if ((!(visualLinking instanceof XYVisualization))||(!(visualLinked instanceof XYVisualization))) 261 return false; 262 263 return (typeLinked == typeLinking ? true : false); 264 } 265 266 public void runLinkedVisualization() { 267 for (int i=0; i<unifiedDimension.length; i++) { 268 for (int j=0; j<unifiedDimension[i].size(); j++) { 269 UnifiedVisualization linkedVisualization = (UnifiedVisualization)unifiedDimension[i].get(j); 270 linkedVisualization.visualize(); 271 } 272 } 273 } 274 275 public void unregisterLinkedViz(Visualization viz) { 276 int delCount = 0; 277 for (int i=0; i<unifiedDimension.length; i++) { 278 for (int j=0; j<unifiedDimension[i].size(); j++) { 279 UnifiedVisualization linkedVisualization = (UnifiedVisualization)unifiedDimension[i].get(j-delCount); 280 int vizLeft = linkedVisualization.unregisterViz(viz); 281 if (vizLeft == 0) { 282 unifiedDimension[i].remove(j-delCount); 283 delCount++; 284 } 285 286 } 287 } 288 } 289 }